/*!
 * @license
 * Copyright 2019 Alfresco, Inc. and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

export enum MultiInstanceType {
    sequence = 'sequence',
    parallel = 'parallel',
    none = 'none'
}

export enum MultiInstanceProps {
    loopCharacteristics = 'loopCharacteristics',
    loopCardinality = 'loopCardinality',
    isSequential = 'isSequential',
    completionCondition = 'completionCondition',
    collection = 'collection',
    elementVariable = 'elementVariable',
    outputDataItem = 'outputDataItem',
    loopDataOutputRef = 'loopDataOutputRef'
}

export function getMultiInstanceType(element): MultiInstanceType {
    const { isSequential = null } = (element || {});
    if (isSequential === null) {
        return MultiInstanceType.none;
    }
    return isSequential ? MultiInstanceType.sequence : MultiInstanceType.parallel;
}

const get = element => getMultiInstanceType(element.businessObject.loopCharacteristics);

const set = (modeling: Bpmn.Modeling, element: Bpmn.DiagramElement, value: any) => {
    modeling.updateProperties(element, {});
};

export const multiInstanceHandler = { get, set };
